/**
 * 
 */
package gwtool.container;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author Christian
 * 
 */
@XmlRootElement
public class PersonItem extends DataSetItem {

	private List<InlinePruefung> noetigePruefungen = new ArrayList<>();

	private List<Geprueft> durchgefuehrtePruefungen = new ArrayList<>();

	private String Strasse = "";

	private String plz = "";

	private String ort = "";

	private long geburtstag = 0;

	private String geschlecht = "";

	private String mitgliedsnummer = "";

	private String telefon = "";

	private String mobiltelefon = "";

	private String email = "";

	private List<InlineLehrgang> lehrgaenge = new ArrayList<>();

	public PersonItem() {

		setStatus("Einsatzbereit");
	}

	@Override
	public String getType() {

		return "Person";
	}

	@Override
	public String printType() {

		return getType();
	}

	@Override
	public String getFullTextFilterString() {

		StringBuilder b = new StringBuilder(getBezeichner());
		b.append(" ");
		b.append(getKommentar());
		b.append(" ");
		b.append(getStrasse());
		b.append(" ");
		b.append(getStatus());
		b.append(" ");
		b.append(getPlz());
		b.append(" ");
		b.append(getOrt());
		b.append(" ");
		b.append(getGeschlecht());
		b.append(" ");
		b.append(getMitgliedsnummer());
		b.append(" ");
		b.append(getTelefon());
		b.append(" ");
		b.append(getEmail());
		return b.toString();
	}

	@Override
	public String toString() {

		return getBezeichner();
	}

	@Override
	public PruefungAnzeigen getNaestePruefungen() {

		InlinePruefung naechstePruefung = null;
		Geprueft geprueft = null;
		boolean schonGeprueft = false;
		long minTageBisZurPruefung = Integer.MAX_VALUE;
		Collections.sort(durchgefuehrtePruefungen);
		for (InlinePruefung p : noetigePruefungen) {
			for (Geprueft g : durchgefuehrtePruefungen) {
				if (g.getIndentifer().equals(p.getIdentifier())) {
					geprueft = g;
					schonGeprueft = true;
					break;
				}
			}
			if (geprueft == null) {
				geprueft = new Geprueft();
				geprueft.setGesprueftAM(new Date(0));
			}
			long tageBisZurPruefung = p.getTageBisLong(geprueft.getGesprueftAM());
			if (minTageBisZurPruefung > tageBisZurPruefung) {
				minTageBisZurPruefung = tageBisZurPruefung;
				naechstePruefung = p;
			}
		}
		if (naechstePruefung != null) {

			if (schonGeprueft) {

				return new PruefungAnzeigen(naechstePruefung, minTageBisZurPruefung,
						naechstePruefung.getDateumNaechstePruefung(geprueft.getGesprueftAM()));
			} else {
				return new PruefungAnzeigen(naechstePruefung, minTageBisZurPruefung, null);
			}
		}
		return new PruefungAnzeigen();
	}

	/**
	 * @return the noetigePruefungen
	 */
	public List<InlinePruefung> getNoetigePruefungen() {

		return noetigePruefungen;
	}

	/**
	 * @param noetigePruefungen
	 *            the noetigePruefungen to set
	 */
	public void setNoetigePruefungen(List<InlinePruefung> noetigePruefungen) {

		this.noetigePruefungen = noetigePruefungen;
	}

	/**
	 * @return the durchgefuehrtePruefungen
	 */
	public List<Geprueft> getDurchgefuehrtePruefungen() {

		return durchgefuehrtePruefungen;
	}

	/**
	 * @param durchgefuehrtePruefungen
	 *            the durchgefuehrtePruefungen to set
	 */
	public void setDurchgefuehrtePruefungen(List<Geprueft> durchgefuehrtePruefungen) {

		this.durchgefuehrtePruefungen = durchgefuehrtePruefungen;
	}

	/**
	 * @return the strasse
	 */
	public String getStrasse() {

		return Strasse;
	}

	/**
	 * @param strasse
	 *            the strasse to set
	 */
	public void setStrasse(String strasse) {

		Strasse = strasse;
	}

	/**
	 * @return the plz
	 */
	public String getPlz() {

		return plz;
	}

	/**
	 * @param plz
	 *            the plz to set
	 */
	public void setPlz(String plz) {

		this.plz = plz;
	}

	/**
	 * @return the ort
	 */
	public String getOrt() {

		return ort;
	}

	/**
	 * @param ort
	 *            the ort to set
	 */
	public void setOrt(String ort) {

		this.ort = ort;
	}

	/**
	 * @return the geburtstag
	 */
	public long getGeburtstag() {

		return geburtstag;
	}

	/**
	 * @param geburtstag
	 *            the geburtstag to set
	 */
	public void setGeburtstag(long geburtstag) {

		this.geburtstag = geburtstag;
	}

	/**
	 * @return the geschlecht
	 */
	public String getGeschlecht() {

		return geschlecht;
	}

	/**
	 * @param geschlecht
	 *            the geschlecht to set
	 */
	public void setGeschlecht(String geschlecht) {

		this.geschlecht = geschlecht;
	}

	/**
	 * @return the mitgliedsnummer
	 */
	public String getMitgliedsnummer() {

		return mitgliedsnummer;
	}

	/**
	 * @param mitgliedsnummer
	 *            the mitgliedsnummer to set
	 */
	public void setMitgliedsnummer(String mitgliedsnummer) {

		this.mitgliedsnummer = mitgliedsnummer;
	}

	/**
	 * @return the telefon
	 */
	public String getTelefon() {

		return telefon;
	}

	/**
	 * @param telefon
	 *            the telefon to set
	 */
	public void setTelefon(String telefon) {

		this.telefon = telefon;
	}

	/**
	 * @return the mobiltelefon
	 */
	public String getMobiltelefon() {

		return mobiltelefon;
	}

	/**
	 * @param mobiltelefon
	 *            the mobiltelefon to set
	 */
	public void setMobiltelefon(String mobiltelefon) {

		this.mobiltelefon = mobiltelefon;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {

		return email;
	}

	/**
	 * @param email
	 *            the email to set
	 */
	public void setEmail(String email) {

		this.email = email;
	}

	/**
	 * @return the lehrgaenge
	 */
	public List<InlineLehrgang> getLehrgaenge() {

		return lehrgaenge;
	}

	/**
	 * @return the lehrgaenge
	 */
	public void setLehrgaenge(List<InlineLehrgang> l) {

		lehrgaenge = l;
	}
}
